// UVa1640 The Counting Problem
// 陈锋
#include <bits/stdc++.h>
using namespace std;
#define _for(i, a, b) for (int i = (a); i < (b); ++i)
#define _rep(i, a, b) for (int i = (a); i <= (b); ++i)
typedef long long LL;
typedef valarray<int> TRes;

int P10[9]; // P10[i] = 10^i
TRes solve(int N) {  // 计算0~N的每个值
  TRes ans(0, 10);
  if (N == 0) {
    ans[0] = 1;
    return ans;
  }
  auto S = to_string(N);
  int W = S.size();
  _for(k, 1, W) {  // ***** 宽度为k的数字
    if (k == 1) {  // 0~9
      ans += 1;
      continue;
    }
    _rep(d, 1, 9) ans[d] += P10[k - 1];  // d****
    ans += 9 * P10[k - 2] * (k - 1);     // 9*(10^(k-1))*(k-1)/10
  }
  _for(i, 0, W - 1) {
    int sd = i == 0 ? 1 : 0;
    _for(d, sd, S[i] - '0') {                   // 考虑----d**** d<S[i]
      int l = W - i - 1;                        // ----d**** 中*的个数
      _for(j, 0, i) ans[S[j] - '0'] += P10[l];  // ----d**** 中的 -
      ans[d] += P10[l];                         // ----d**** 中的 d
      ans += P10[l - 1] * l;                    // ----d**** 中的*
    }
  }

  _rep(d, 0, S[W - 1] - '0') {  //******d
    _for(j, 0, W - 1) ans[S[j] - '0']++;
    ans[d]++;
  }

  return ans;
}

TRes solve(int a, int b) {
  if (a > b) swap(a, b);
  const TRes &ta = solve(a - 1), &tb = solve(b);
  return tb - ta;
}

int main() {
  P10[0] = 1;
  _for(i, 1, 9) P10[i] = 10 * P10[i - 1];
  for (int a, b; scanf("%d%d", &a, &b) == 2 && a && b; ) {
    const auto& ans = solve(a, b);
    _for(i, 0, 10) printf("%d%s", ans[i], i == 9 ? "\n" : " ");
  }
  return 0;
}
/*
算法分析请参考: 《入门经典-第2版》 例题 10-22
注意，本题使用了C++11新引入的数据结构valarray，来简化对一个数组中所有元素的同时操作
*/
// 25826255 1640  The Counting Problem  Accepted  C++ 0.000 2020-12-08 14:26:13